package BaseDatos;

import Modelo.Grupo;
import Modelo.Nivel;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class GestorNivel {

    private String URL_Servidor = "localhost";
    private static final String BASE_DATOS = "ADEHO";
    private static final String LOGIN = "root";
    private static final String PASSWORD = "root";
    private static final String CMD_LISTAR =
            "SELECT * FROM nivel";
    private static final String CMD_OBTENER_NIVEL =
            "SELECT * FROM nivel WHERE idNivel = ? AND anno=?";
    private static final String CMD_INCLUIR =
            "INSERT into nivel VALUES (?,?,?) ";
    private static final String CMD_BORRAR =
            "DELETE FROM nivel WHERE idNivel=? AND anno=?";

    public ArrayList<Nivel> ListarNivel() {
        ArrayList<Nivel> niveles = new ArrayList();
        GestorBD bd = null;
        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx = bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);

            Statement stm = cnx.createStatement();
            ResultSet rs = stm.executeQuery(CMD_LISTAR);

            while (rs.next()) {
                Nivel n = new Nivel(rs.getString(1),rs.getInt(2),rs.getString(3));
                niveles.add(n);
            }
        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
        return niveles;
    }

    public Nivel obtenerNivel(String nivel,String anno) {
        Nivel n = null;
        GestorBD bd = null;
        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx =
                    bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);

            PreparedStatement stm = cnx.prepareStatement(CMD_OBTENER_NIVEL);
            stm.clearParameters();
            stm.setString(1, nivel);
            stm.setString(2, anno);

            ResultSet rs = stm.executeQuery();
            n = new Nivel(rs.getString(1), rs.getInt(2),rs.getString(3));

            stm.close();

        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }

        return n;
    }

    public boolean actualizarNivel(Nivel pNivel) {
        boolean exito = false;
        int registrosActualizados = 0;
        GestorBD bd = null;
        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx =
                    bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);

            PreparedStatement stm = cnx.prepareStatement(CMD_INCLUIR);
            stm.clearParameters();

            stm.setString(1, pNivel.getIdNivel());

            registrosActualizados = stm.executeUpdate();
            exito = registrosActualizados == 1;
            stm.close();

        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
        return exito;
    }

    public boolean borrarNivel(Nivel pNivel) {
        boolean borrado = false;
            int registrosActualizados = 0;
        GestorBD bd = null;
        try {
            bd = GestorBD.obtenerInstancia(URL_Servidor);
            Connection cnx =
                    bd.obtenerConexion(BASE_DATOS, LOGIN, PASSWORD);

            PreparedStatement stm = cnx.prepareStatement(CMD_BORRAR);
            stm.clearParameters();

            stm.setString(1, pNivel.getIdNivel());
            stm.setString(2, pNivel.getAnno());

            registrosActualizados = stm.executeUpdate();
            borrado = registrosActualizados == 1;
            stm.close();

        } catch (Exception e) {
            e.printStackTrace(System.err);
        } finally {
            bd.cerrarConexion();
        }
        return borrado;
    }
}
